<?php
/**
 * vim: et ts=4 sts=4 sw=4
 *
 * PEAR Pager 派生类
 * 适用于 PHP5 PHP4
 *
 * @author	wang penghai <china_php@hotmail.com>
 * @copyright 2007 5e6d Corporation.
 * @version   $Id$ 
 */

define('PF_APP_LIB_PATH',PF_ROOT.'/lib/');
define('ED_APP_LIB_PATH',PF_ROOT.'/lib/');
/**
 * path configure
 */
require_once PF_APP_LIB_PATH . 'Pager/Pager.php';

/**
 * Smarty 派生类
 * 只适用于 PHP5
 *
 * @package PAGER
 * @see Smarty
 */
class pf_pager extends Pager
{
	/**
	 * PEAR 的 Pager 对象
	 *
	 * @var object
	 */
	protected $__PAGER = null;

	/**
	 * Pager 的初始化参数数组
	 *
	 * @var array
	 */
	protected $__params = array();


	/**
	 * 构造函数,处理初始化的参数设置
	 *
	 * @param array $params 初始化参数数组
	 * @param array $options 初始化参数数组
	 *
	 * @return void
	 */
	public function __construct($params=array(), $options=array())
	{
		if (!empty($params)) {
			$this->set_params($params);
		}
		if (!empty($options)) {
			$this->set_options($options);
		}
	}

	/**
	 * 构造函数,处理初始化的参数设置 php 4.0
	 *
	 * @param array $params 初始化参数数组
	 * @param array $options 初始化参数数组
	 *
	 * @return void
	 */
	public function pf_pager($params=array(), $options=array())
	{
		if (!empty($params)) {
			$this->set_params($params);
		}
		if (!empty($options)) {
			$this->set_options($options);
		}
	}
	
	/**
	 * 初始化 Pager 对象
	 *
	 * @param array $params 初始化参数数组
	 * @param array $options 初始化参数数组
	 *
	 * @return void
	 */
	public function init_pager($params=array(), $options=array())
	{
		$this->_set_default_params();

		if (!empty($params)) {
			$this->set_params($params);
		}
		if (!empty($options)) {
			$this->set_options($options);
		}

		$this->__PAGER = Pager::factory($this->__params);
	}

	/**
	 * 判断对象是否存在,初始化 Pager 对象
	 *
	 * @param array $params 初始化参数数组
	 * @param array $options 初始化参数数组
	 *
	 * @return void
	 */
	protected function _init_pager_ino($params=array(), $options=array())
	{
		if (!is_object($this->__PAGER)) {
			$this->init_pager($params, $options);
		}
	}

	/**
	 * 设置默认初始化参数
	 *
	 * @return void
	 */
	protected function _set_default_params()
	{
		//设置默认的初始化参数
		$params_default =
		array(
			'delta' => 1, //显示几个页数链接
			'linkClass' => 'page_link', //页数链接的class
			'append' => true, //false:URL重写
			'httpMethod' => 'GET',
			'urlVar' => 'page', //页数传递的key
			'altFirst' => '第一页',
			'altPrev' => '上一页',
			'altNext' => '下一页',
			'altLast' => '后一页',
			'altPage' => '页码',
			'prevImg' => '[上一页]',
			'nextImg' => '[下一页]',
			'separator' => '|', //页数连接之间的分割符号
			//'spacesBeforeSeparator' => 0, //分隔符之前的空格数
			//'spacesAfterSeparator' => 1, //分隔符之后的空格数
			'curPageLinkClassName' => 'page_link', //当前页数链接的class
			//'curPageSpanPre' => '',
			//'curPageSpanPost' => '',
			'firstPagePre' => '[',
			'firstPageText' => '第一页',
			'firstPagePost' => ']',
			'lastPagePre' => '[',
			'lastPageText' => '最后一页',
			'lastPagePost' => ']',
			'firstLinkTitle' => '',
			'nextLinkTitle' => '',
			'prevLinkTitle' => '',
			'lastLinkTitle' => '',
			'clearIfVoid' => false, //如果只有一页是否不显示
			'extraVars' => array(), //额外需要添加的变量 array('key' => 'value', ...)
			'excludeVars' => array(), //额外需要去掉的变量 array('key1', 'key2', ...)
		);
		$this->__params = array_merge($params_default, $this->__params);
	}

	/**
	 * 设置初始化参数
	 *
	 * @param array $params 初始化参数
	 *
	 * @return void
	 */
	public function set_params($params=array())
	{
		if (is_array($params) && !empty($params)) {
			$this->__params = array_merge($this->__params, $params);
		}
	}

	/**
	 * 设置数据总数
	 *
	 * @param integer $total 数据总数
	 *
	 * @return void
	 */
	public function set_total($total)
	{
		$this->__params['totalItems'] = (int) $total;
	}

	/**
	 * 设置每页数据数
	 *
	 * @param integer $per 每页数据数
	 *
	 * @return void
	 */
	public function set_per_page($per)
	{
		$this->__params['perPage'] = (int) $per;
	}

	/**
	 * 设置数据,此数据会覆盖total
	 *
	 * @param array $data 数据数组
	 *
	 * @return void
	 */
	public function set_data($data)
	{
		if (!is_array($data)) {
			$data = array();
		}
		$this->__params['itemData'] = $data;
	}

	/**
	 * 设置数据参数
	 *
	 * @param array $options 数据参数数组,允许的元素如下:
	 * array(
	 *	 'total' => 100;
	 *	 'per_page' => 10;
	 *	 'data' => array(...);
	 * );
	 *
	 * @return void
	 */
	public function set_options($options)
	{
		if (isset($options['total'])) {
			$this->set_total($options['total']);
		}
		if (isset($options['per_page'])) {
			$this->set_per_page($options['per_page']);
		}
		if (isset($options['data'])) {
			$this->set_data($options['data']);
		}
	}

	/**
	 * 获取分页链接
	 *
	 * @return string 分页链接
	 */
	public function get_links()
	{
		$this->_init_pager_ino();

		$links = $this->__PAGER->getLinks();
		$space = '&nbsp;';
		return $links['first'].$space.$links['back'].$space
			  .$links['next'].$space.$links['last'];
	}

	/**
	 * 获取数据偏移
	 *
	 * @return array 数据偏移 array('from' => 10, 'to' => 20)
	 */
	public function get_offset()
	{
		$this->_init_pager_ino();

		list($offset['from'], $offset['to']) = $this->__PAGER->getOffsetByPageId();
		return $offset;
	}

	/**
	 * 获取当页数据
	 * 只适用于传递了全部数据,依靠 Pager 分离数据的方式
	 *
	 * @return array 当页数组
	 */
	public function get_page_data()
	{
		$this->_init_pager_ino();

		return $this->__PAGER->getPageData();
	}

	/**
	 * 获取总页数
	 *
	 * @return integer 总页数
	 */
	public function get_page_num()
	{
		$this->_init_pager_ino();

		return $this->__PAGER->numPages();
	}

	/**
	 * 获取当前页码
	 *
	 * @return integer 当页页码
	 */
	public function get_current_page_id()
	{
		$this->_init_pager_ino();

		return $this->__PAGER->getCurrentPageID();
	}
	
	/**
	 * 获取当前页码
	 *
	 * @return integer 当页页码
	 */
	public function getPageSelectBox()
	{
		$this->_init_pager_ino();

		return $this->__PAGER->getPageSelectBox();
	}
}
/**
用法
$fields = array(
	'count(*) as num'
);

$total = $app_ad->_get_kh_gginad_res($fields, null, null, null, null, true);
$per_page = 30;
$options =
array(
		'total'	=> $total['num'],   //数据总数
		'per_page' => $per_page, //每页数据数
	 );

//对象化分页类
$PAGER = new pf_pager();

//设置选项
$PAGER->set_options($options);

//初始化
$PAGER->init_pager();

//取得连接字符串
$links = $PAGER->get_links(); //链接

//取得当前页记录开始号
$offset = $PAGER->get_offset(); //from to
$offset = $offset['from'] - 1;

//取得总页数
$page_num = $PAGER->get_page_num(); //总页数

//取得当前是第几页
$page_id = $PAGER->get_current_page_id(); //当前页数

$sql = " limit $per_page, $offset";



$TPL->assign('links',$links);
$TPL->assign('page_id',$page_id);
$TPL->assign('page_num',$page_num);
$TPL->assign('total_user',$total['num']);
*/
?>
